home *** CD-ROM | disk | FTP | other *** search
- PAGE 55,132
- TITLE FONTEDIT - Copyright 1983 Mathews Associates
-
- PUBLIC INITIAL,FATAL,READIN,SETUP
-
- ; General DOS invocation macro
-
- DOS MACRO FNC,VAL,VBX,VCX,VDX,VSI,VDI
- IFNB <VDI>
- MOV DI,VDI
- ENDIF
- IFNB <VSI>
- MOV SI,VSI
- ENDIF
- IFNB <VDX>
- MOV DX,VDX
- ENDIF
- IFNB <VCX>
- MOV CX,VCX
- ENDIF
- IFNB <VBX>
- MOV BX,VBX
- ENDIF
- IFNB <VAL>
- MOV AL,VAL
- ENDIF
- IFNB <FNC>
- MOV AH,FNC
- ENDIF
- INT 33
- ENDM
-
- ; Internal print string macro (string, raster line, byte offset)
-
- PRT MACRO STR,YCO,XCO
- MOV SI,OFFSET STR
- MOV DX,(YCO)*256+XCO
- CALL PRINT
- ENDM
-
- FE SEGMENT
-
- ASSUME CS:FE,DS:FE
-
- ORG 080H
- INLEN DB 1 DUP (?) ; Length of input from DOS
- INPUT DB 127 DUP (?) ; Input remnant from DOS
-
- ORG 0100H
-
- START PROC NEAR
- CALL INITIAL ; Clear screen and load font
- MOV INDEX,0 ; Select zero element for edit
- CALL EXEC ; Execute commands issued
- CALL FINAL ; Store fonts
- MOV AH,0 ; Restore screen state
- MOV AL,VSTATE
- INT 16
- DOS 76,0 ; and terminate
-
- START ENDP
-
- NOTICE DB 'FONTEDIT Copyright 1983 Mathews Associates',13,10,'$'
-
- USAGE DB 13,10,'FONTEDIT should be used with a pathname'
- DB ' of the font to be altered or created.',13,10
- DB 'I.e. C>FONTEDIT \QUADSCREEN\FONTS\CH5X7.FON',13,10
- DB 'If the extension is omitted then .FON will be assumed.',13,10
- DB '$'
-
- FILEIS DB 'Font:',0
-
- XMSG DB 'Enter width in dots of character font (4 <= N <= 32) :$'
-
- YMSG DB 'Enter height in dots of character font (4 <= N <= 32) :$'
-
- FMSG DB 'Fatal error has occurred.',13,10,'$'
-
- QMSG1 DB 'Pressing F6 initiates the cancel edit sequence. The font',0
- QMSG2 DB 'definition file will be restored to the state it was in',0
- QMSG3 DB 'before FONTEDIT was executed. If this is what you want to',0
- QMSG4 DB 'do then press the F1 key now else press the F2 key to',0
- QMSG5 DB 'continue with the edit.',0
-
- NMSG1 DB 'FONTEDIT Version 1.02 @ 1983 Mathews Associates',0
- NMSG2 DB 'F1 - Edit entry / Done F2 - Cancel entry',0
- NMSG3 DB 'F3 - Edit with displayed data F4 - Edit with null data',0
- NMSG4 DB 'F5 - Exit and write font F6 - Quit and cancel edit',0
- NMSG5 DB 'F7 - Disable pen F8 - Unused',0
- NMSG6 DB 'F9 - Enable white pen F& - Enable black pen',0
- NMSG7 DB 'Arrows are used to move between characters and dots.',0
- NMSG8 DB 'Diagonals may be used in character entry.',0
- NMSG9 DB 'Center key (5) toggles dot state (Num Lock must be on).',0
- NMSG10 DB 'Left hex value is character selected, right hex value is',0
- NMSG11 DB 'last character loaded into buffer.',0
-
- HMSG DB '00 : 00',0
-
- BITCURR DB 000H,018H,018H,07EH,07EH,018H,018H,000H
-
- BITON DB 0BDH,03CH,0FFH,0FFH,0FFH,0FFH,03CH,0BDH
-
- BITOFF DB 081H,000H,000H,000H,000H,000H,000H,081H
-
- DEFEXT DB '.FON',0
-
- BAKEXT DB '.BAK',0
-
- MASKS DB 000H,080H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH
-
- BITS DB 080H,040H,020H,010H,008H,004H,002H,001H
-
- PATH DB 64 DUP (?) ; Original path and file
-
- BACKUP DB 64 DUP (?) ; Backup path and file
-
- NEWFILE DB ? ; New file flag
-
- HANDLE DW ? ; File handle
-
- INDEX DB ? ; Current character in set
-
- XFONT DB ? ; Width in bits
-
- YFONT DB ? ; Depth in rasters
-
- XSIZE DB ? ; Width in bytes
-
- CSIZE DB ? ; Total size of definition in bytes
-
- XCURR DB ? ; Current bit in buffer
-
- YCURR DB ? ; Current raster in buffer
-
- EDMODE DB ? ; Edit mode (1 = pen down, 2 = white/black pen)
-
- VSTATE DB ? ; Previous screen mode
-
- ; Edit buffer:
-
- TBUFF DB 32/8*32 DUP (?)
-
- ; Set buffer:
-
- FBUFF DB 32/8*32*256 DUP (?)
-
- ; Load file and setup screen
-
- INITIAL PROC NEAR
- MOV AH,15
- INT 16
- MOV VSTATE,AL
- DOS 9,,,,<OFFSET NOTICE>
- TEST INLEN,0FFH
- JZ INIT3
- MOV SI,OFFSET INPUT
- MOV CL,INLEN
- XOR CH,CH
- INIT1:
- CMP BYTE PTR ES:[SI],' '
- JNZ INIT2
- INC SI
- LOOP INIT1
- JMP SHORT INIT3
- INIT2:
- CALL READIN
- CALL SETUP
- RET
- INIT3:
- DOS 9,,,,<OFFSET USAGE>
- DOS 76,0
-
- INITIAL ENDP
-
- ; Execute commands until exit
-
- EXEC PROC NEAR
- MOV EDMODE,0
- CALL DWBIG
- EXEC1:
- MOV DL,1
- CALL DWSMALL
- CALL KEYBD
- JNC EXEC1B
- MOV DL,0
- CALL DWSMALL
- CALL KEYBD
- JNC EXEC1A
- JMP EXEC1
- EXEC1A:
- PUSH AX
- MOV DL,1
- CALL DWSMALL
- POP AX
- EXEC1B:
- CMP AH,59
- JNZ EXEC2
- MOV XCURR,0
- MOV YCURR,0
- MOV AL,INDEX
- MUL CSIZE
- ADD AX,OFFSET FBUFF
- MOV SI,AX
- MOV DI,OFFSET TBUFF
- MOV AX,DS
- MOV ES,AX
- MOV CL,CSIZE
- XOR CH,CH
- CLD
- REP MOVSB
- CALL EDIT
- JMP EXEC1
- EXEC2:
- CMP AH,61
- JNZ EXEC3
- CALL EDIT
- JMP EXEC1
- EXEC3:
- CMP AH,62
- JNZ EXEC4
- MOV DI,OFFSET TBUFF
- MOV AX,DS
- MOV ES,AX
- MOV CL,CSIZE
- XOR CH,CH
- XOR AX,AX
- CLD
- REP STOSB
- CALL EDIT
- JMP EXEC1
- EXEC4:
- CMP AH,72
- JNZ EXEC5
- MOV DL,0
- CALL DWSMALL
- SUB INDEX,010H
- MOV DH,240
- MOV DL,0
- MOV AL,INDEX
- CALL PRHEX
- JMP EXEC1
- EXEC5:
- CMP AH,80
- JNZ EXEC6
- MOV DL,0
- CALL DWSMALL
- ADD INDEX,010H
- MOV DH,240
- MOV DL,0
- MOV AL,INDEX
- CALL PRHEX
- JMP EXEC1
- EXEC6:
- CMP AH,75
- JNZ EXEC7
- MOV DL,0
- CALL DWSMALL
- MOV AL,INDEX
- MOV AH,AL
- AND AH,0F0H
- DEC AL
- AND AL,00FH
- OR AL,AH
- MOV INDEX,AL
- MOV DH,240
- MOV DL,0
- MOV AL,INDEX
- CALL PRHEX
- JMP EXEC1
- EXEC7:
- CMP AH,77
- JNZ EXEC8
- MOV DL,0
- CALL DWSMALL
- MOV AL,INDEX
- MOV AH,AL
- AND AH,0F0H
- INC AL
- AND AL,00FH
- OR AL,AH
- MOV INDEX,AL
- MOV DH,240
- MOV DL,0
- MOV AL,INDEX
- CALL PRHEX
- JMP EXEC1
- EXEC8:
- CMP AH,63
- JNZ EXEC9
- RET
- EXEC9:
- CMP AH,64
- JNZ EXEC10
- CALL QUERY
- JC EXEC10
- MOV AH,0 ; Restore screen state
- MOV AL,VSTATE
- INT 16
- DOS 76,0
- EXEC10:
- JMP EXEC1
-
- EXEC ENDP
-
- ; Edit buffer until through
-
- EDIT PROC NEAR
- MOV EDMODE,4
- MOV DH,240
- MOV DL,5
- MOV AL,INDEX
- CALL PRHEX
- EDIT1:
- CALL DWBIG
- EDIT2:
- CALL KEYBD
- JC EDIT2
- CMP AH,59
- JNZ EDIT3
- MOV AL,INDEX
- MUL CSIZE
- ADD AX,OFFSET FBUFF
- MOV DI,AX
- MOV SI,OFFSET TBUFF
- MOV CL,CSIZE
- XOR CH,CH
- MOV AX,DS
- MOV ES,AX
- CLD
- REP MOVSB
- MOV EDMODE,0
- CALL DWBIG
- RET
- EDIT3:
- CMP AH,60
- JNZ EDIT4
- MOV EDMODE,0
- CALL DWBIG
- RET
- EDIT4:
- CMP AH,65
- JNZ EDIT5
- AND EDMODE,NOT 1
- JMP EDIT1
- EDIT5:
- CMP AH,67
- JNZ EDIT6
- OR EDMODE,3
- CALL EDMOVE
- JMP EDIT1
- EDIT6:
- CMP AH,68
- JNZ EDIT7
- OR EDMODE,1
- AND EDMODE,NOT 2
- CALL EDMOVE
- JMP EDIT1
- EDIT7:
- CMP AH,76
- JNZ EDIT8
- CALL ADDBIT
- XOR TBUFF[BX],AH
- JMP EDIT1
- EDIT8:
- CMP AH,71
- JNZ EDIT9
- CALL EDPTUP
- CALL EDPTLT
- CALL EDMOVE
- JMP EDIT1
- EDIT9:
- CMP AH,72
- JNZ EDIT10
- CALL EDPTUP
- CALL EDMOVE
- JMP EDIT1
- EDIT10:
- CMP AH,73
- JNZ EDIT11
- CALL EDPTUP
- CALL EDPTRT
- CALL EDMOVE
- JMP EDIT1
- EDIT11:
- CMP AH,75
- JNZ EDIT12
- CALL EDPTLT
- CALL EDMOVE
- JMP EDIT1
- EDIT12:
- CMP AH,77
- JNZ EDIT13
- CALL EDPTRT
- CALL EDMOVE
- JMP EDIT1
- EDIT13:
- CMP AH,79
- JNZ EDIT14
- CALL EDPTLT
- CALL EDPTDN
- CALL EDMOVE
- JMP EDIT1
- EDIT14:
- CMP AH,80
- JNZ EDIT15
- CALL EDPTDN
- CALL EDMOVE
- JMP EDIT1
- EDIT15:
- CMP AH,81
- JNZ EDIT16
- CALL EDPTDN
- CALL EDPTRT
- CALL EDMOVE
- EDIT16:
- JMP EDIT1
-
- EDIT ENDP
-
- ; Move edit point up
-
- EDPTUP PROC NEAR
- MOV AL,YCURR
- OR AL,AL
- JNZ EDUP1
- MOV AL,YFONT
- EDUP1:
- DEC AL
- MOV YCURR,AL
- RET
-
- EDPTUP ENDP
-
- ; Move edit point down
-
- EDPTDN PROC NEAR
- MOV AL,YCURR
- INC AL
- CMP AL,YFONT
- JB EDDN1
- XOR AL,AL
- EDDN1:
- MOV YCURR,AL
- RET
-
- EDPTDN ENDP
-
- ; Move edit point left
-
- EDPTLT PROC NEAR
- MOV AL,XCURR
- OR AL,AL
- JNZ EDLT1
- MOV AL,XFONT
- EDLT1:
- DEC AL
- MOV XCURR,AL
- RET
-
- EDPTLT ENDP
-
- ; Move edit point right
-
- EDPTRT PROC NEAR
- MOV AL,XCURR
- INC AL
- CMP AL,XFONT
- JB EDRT1
- XOR AL,AL
- EDRT1:
- MOV XCURR,AL
- RET
-
- EDPTRT ENDP
-
- ; Paint new position if pen down
-
- EDMOVE PROC NEAR
- TEST EDMODE,1
- JNZ EDMV1
- RET
- EDMV1:
- CALL ADDBIT
- TEST EDMODE,2
- JZ EDMV2
- OR TBUFF[BX],AH
- RET
- EDMV2:
- NOT AH
- AND TBUFF[BX],AH
- RET
-
- EDMOVE ENDP
-
- ; Get address and mask of current position
-
- ADDBIT PROC NEAR
- MOV AL,YCURR
- MUL XSIZE
- MOV BL,XCURR
- MOV CL,3
- SHR BL,CL
- XOR BH,BH
- ADD AX,BX
- MOV BL,XCURR
- AND BL,7
- MOV BH,BITS[BX]
- XCHG AX,BX
- RET
-
- ADDBIT ENDP
-
- ; Rename old file to backup and write new file
-
- FINAL PROC NEAR
- TEST NEWFILE,0FFH
- JNZ FINL6
- MOV AX,DS
- MOV ES,AX
- MOV SI,OFFSET PATH
- MOV DI,OFFSET BACKUP
- CLD
- FINL1:
- LODSB
- OR AL,AL
- JZ FINL2
- STOSB
- JMP FINL1
- FINL2:
- MOV [DI],AL
- LEA SI,[DI-1]
- STD
- FINL3:
- LODSB
- CMP AL,'.'
- JNZ FINL3
- LEA DI,[SI+1]
- MOV SI,OFFSET BAKEXT
- MOV CX,5
- CLD
- REP MOVSB
- DOS 65,,,,<OFFSET BACKUP>
- JNC FINL4
- CMP AL,2
- JNZ FINL5
- FINL4:
- DOS 86,,,,<OFFSET PATH>,,<OFFSET BACKUP>
- JNC FINL6
- FINL5:
- CALL FATAL
- FINL6:
- DOS 60,,,0,<OFFSET PATH>
- JC FINL5
- MOV HANDLE,AX
- DOS 64,,HANDLE,1,<OFFSET XFONT>
- JC FINL5
- CMP AX,CX
- JNZ FINL5
- DOS 64,,HANDLE,1,<OFFSET YFONT>
- JC FINL5
- CMP AX,CX
- JNZ FINL5
- MOV CH,CSIZE
- XOR CL,CL
- DOS 64,,HANDLE,,<OFFSET FBUFF>
- JC FINL5
- CMP AX,CX
- JNZ FINL5
- DOS 62,,HANDLE
- JC FINL5
- RET
-
- FINAL ENDP
-
- ; Load font file
-
- READIN PROC NEAR
- MOV AX,DS
- MOV ES,AX
- MOV DI,OFFSET PATH
- PUSH CX
- CLD
- REP MOVSB
- POP CX
- MOV BYTE PTR [DI],0
- MOV SI,DI
- STD
- DEC SI
- RDIN1:
- LODSB
- CMP AL,'.'
- JZ RDIN3
- CMP AL,'\'
- JZ RDIN2
- CMP AL,'/'
- JZ RDIN2
- LOOP RDIN1
- RDIN2:
- MOV SI,OFFSET DEFEXT
- MOV CX,5
- CLD
- REP MOVSB
- DEC DI
- RDIN3:
- MOV NEWFILE,0
- DOS 61,0,,,<OFFSET PATH>
- JNC RDIN4
- CMP AL,2
- JNZ RDIN5
- INC NEWFILE
- JMP RDIN7
- RDIN4:
- MOV HANDLE,AX
- DOS 63,,AX,1,<OFFSET XFONT>
- JC RDIN5
- CMP AX,1
- JZ RDIN6
- RDIN5:
- CALL FATAL
- RDIN6:
- DOS 63,,HANDLE,1,<OFFSET YFONT>
- JC RDIN5
- CMP AX,1
- JNZ RDIN5
- CALL CALCSZ
- DOS 63,,HANDLE,,<OFFSET FBUFF>
- JC RDIN5
- CMP AX,CX
- JNZ RDIN5
- DOS 62,,HANDLE
- JC RDIN5
- RET
- RDIN7:
- MOV SI,OFFSET XMSG
- CALL INVAL
- MOV XFONT,AL
- MOV SI,OFFSET YMSG
- CALL INVAL
- MOV YFONT,AL
- CALL CALCSZ
- MOV AX,DS
- MOV ES,AX
- XOR AL,AL
- MOV DI,OFFSET FBUFF
- CLD
- REP STOSB
- RET
-
- READIN ENDP
-
- ; Calculate total font size
-
- CALCSZ PROC NEAR
- MOV AL,XFONT
- ADD AL,7
- MOV CL,3
- SHR AL,CL
- MOV XSIZE,AL
- MUL YFONT
- MOV CSIZE,AL
- MOV CH,AL
- XOR CL,CL
- RET
-
- CALCSZ ENDP
-
- ; Setup screen and display current character set
-
- SETUP PROC NEAR
- CALL CLEAR
- MOV INDEX,0
- SETP1:
- XOR DL,DL
- CALL DWSMALL
- INC INDEX
- JNZ SETP1
- MOV CX,32/8*32/2
- MOV DI,OFFSET TBUFF
- MOV AX,DS
- MOV ES,AX
- CLD
- XOR AX,AX
- REP STOSW
- PRT NMSG1,0,0
- PRT FILEIS,20,0
- PRT PATH,20,6
- PRT NMSG2,40,0
- PRT NMSG3,50,0
- PRT NMSG4,60,0
- PRT NMSG5,70,0
- PRT NMSG6,80,0
- PRT NMSG7,95,0
- PRT NMSG8,105,0
- PRT NMSG9,115,0
- PRT NMSG10,130,0
- PRT NMSG11,140,0
- PRT HMSG,240,0
- RET
-
- SETUP ENDP
-
- ; Erase screen
-
- CLEAR PROC NEAR
- MOV DX,0220H
- MOV AX,04000H
- OUT DX,AX
- MOV CX,08000H
- MOV AX,0D000H
- MOV ES,AX
- XOR AX,AX
- REP STOSW
- RET
-
- CLEAR ENDP
-
- ; Display current character at appropriate position
-
- DWSMALL PROC NEAR
- MOV AX,0D000H
- MOV ES,AX
- MOV AL,INDEX
- MOV BH,AL
- AND BH,0F0H
- MOV BL,AL
- AND BL,00FH
- MOV CL,2
- SHL BL,CL
- MUL CSIZE
- ADD AX,OFFSET FBUFF
- MOV SI,AX
- MOV DH,YFONT
- OR DL,DL
- JNZ DWSM2
- DWSM1:
- XOR CH,CH
- MOV CL,XSIZE
- MOV DI,BX
- CLD
- REP MOVSB
- ADD BX,128
- DEC DH
- JNZ DWSM1
- RET
- DWSM2:
- MOV CX,BX
- DWSM3:
- MOV BL,XFONT
- MOV DI,CX
- CLD
- DWSM4:
- CMP BL,8
- JB DWSM5
- LODSB
- NOT AL
- STOSB
- SUB BL,8
- JMP DWSM4
- DWSM5:
- OR BL,BL
- JZ DWSM6
- LODSB
- XOR BH,BH
- XOR AL,MASKS[BX]
- STOSB
- DWSM6:
- ADD CX,128
- DEC DH
- JNZ DWSM3
- RET
-
- DWSMALL ENDP
-
- ; Display edit buffer and corresponding character
-
- DWBIG PROC NEAR
- MOV AX,0D000H
- MOV ES,AX
- MOV SI,OFFSET TBUFF
- MOV DH,YFONT
- MOV BX,256*128+70
- CLD
- DWBG1:
- MOV DL,XFONT
- MOV DI,BX
- DWBG2:
- MOV AL,XFONT
- XOR AL,DL
- AND AL,7
- JNZ DWBG3
- MOV AH,[SI]
- INC SI
- DWBG3:
- MOV CX,8
- PUSH SI
- PUSH DI
- MOV SI,OFFSET BITON
- SHL AH,1
- JC DWBG4
- MOV SI,OFFSET BITOFF
- DWBG4:
- LODSB
- MOV ES:[DI],AL
- ADD DI,128
- LOOP DWBG4
- POP DI
- POP SI
- INC DI
- DEC DL
- JNZ DWBG2
- ADD BX,128*8
- DEC DH
- JNZ DWBG1
- MOV SI,OFFSET TBUFF
- MOV BX,256*128+65
- MOV DH,YFONT
- DWBG5:
- XOR CH,CH
- MOV CL,XSIZE
- MOV DI,BX
- CLD
- REP MOVSB
- ADD BX,128
- DEC DH
- JNZ DWBG5
- TEST EDMODE,4
- JNZ DWBG6
- RET
- DWBG6:
- MOV AH,YCURR
- XOR AL,AL
- SHL AX,1
- SHL AX,1
- OR AL,XCURR
- ADD AX,256*128+70
- MOV DI,AX
- MOV SI,OFFSET BITCURR
- MOV CX,8
- CLD
- DWBG7:
- LODSB
- XOR ES:[DI],AL
- ADD DI,128
- LOOP DWBG7
- RET
-
- DWBIG ENDP
-
- ; Input value of font size
-
- INVAL PROC NEAR
- DOS 9,,,,SI
- IVAL1:
- DOS 7
- MOV DL,AL
- SUB AL,'0'
- JBE IVAL1
- CMP AL,9
- JA IVAL1
- MOV BL,AL
- DOS 2
- IVAL2:
- DOS 7
- MOV DL,AL
- CMP AL,8
- JNZ IVAL3
- DOS 2
- JMP IVAL1
- IVAL3:
- CMP AL,13
- JNZ IVAL4
- CMP BL,4
- JB IVAL2
- JMP IVAL7
- IVAL4:
- SUB AL,'0'
- JC IVAL2
- CMP AL,'9'
- JA IVAL2
- MOV AH,BL
- ADD AH,AH
- ADD AH,AH
- ADD AH,BL
- ADD AH,AH
- ADD AL,AH
- CMP AL,32
- JA IVAL2
- MOV BH,BL
- MOV BL,AL
- DOS 2
- IVAL5:
- DOS 7
- MOV DL,AL
- CMP AL,8
- JNZ IVAL6
- MOV BL,BH
- DOS 2
- JMP IVAL2
- IVAL6:
- CMP AL,13
- JNZ IVAL5
- CMP BL,4
- JB IVAL5
- IVAL7:
- MOV DL,13
- DOS 2
- MOV DL,10
- DOS 2
- MOV AL,BL
- RET
-
- INVAL ENDP
-
- ; Insure user knows what quit does
-
- QUERY PROC NEAR
- PRT QMSG1,160,0
- PRT QMSG2,170,0
- PRT QMSG3,180,0
- PRT QMSG4,190,0
- PRT QMSG5,200,0
- QURY1:
- CALL KEYBD
- JC QURY1
- CMP AH,59
- JNZ QURY2
- CLC
- RET
- QURY2:
- CMP AH,60
- JNZ QURY1
- MOV AX,0D004H
- MOV BX,160*128
- MOV DL,5*10
- QURY3:
- MOV DI,BX
- XOR AL,AL
- MOV CX,60
- CLD
- REP STOSB
- ADD BX,128
- DEC DL
- JNZ QURY3
- STC
- RET
-
- QUERY ENDP
-
- ; Check for input from the keyboard
-
- KEYBD PROC NEAR
- MOV AH,1
- INT 22
- STC
- JZ KYBD1
- XOR AH,AH
- INT 22
- KYBD1:
- RET
-
- KEYBD ENDP
-
- ; Display a value in hex in internal font
-
- PRHEX PROC NEAR
- MOV BL,AL
- MOV CL,4
- SHR BL,CL
- XOR BH,BH
- PUSH AX
- MOV AL,HEXTAB[BX]
- PUSH DX
- CALL PCHAR
- POP DX
- INC DL
- POP AX
- MOV BL,AL
- AND BX,15
- MOV AL,HEXTAB[BX]
- CALL PCHAR
- RET
-
- HEXTAB DB '0123456789ABCDEF'
-
- PRHEX ENDP
-
- ; Display a string on the screen in internal font
-
- PRINT PROC NEAR
- CLD
- LODSB
- OR AL,AL
- JZ PRNT1
- PUSH DX
- PUSH SI
- CALL PCHAR
- POP SI
- POP DX
- INC DL
- JMP PRINT
- PRNT1:
- RET
-
- PRINT ENDP
-
- ; Display a character on the screen in internal font
-
- PCHAR PROC NEAR
- XOR AH,AH
- MOV SI,AX
- MOV CL,3
- SHL SI,CL
- ADD SI,OFFSET MYFONT+2
- MOV AX,0D004H
- MOV ES,AX
- MOV BH,DH
- XOR BL,BL
- SHR BX,1
- XOR DH,DH
- ADD BX,DX
- MOV CX,8
- CLD
- PCHR1:
- LODSB
- MOV ES:[BX],AL
- ADD BX,128
- LOOP PCHR1
- RET
-
- PCHAR ENDP
-
- ; Display fatal error message and terminate
-
- FATAL PROC NEAR
- MOV AH,0 ; Restore screen state
- MOV AL,VSTATE
- INT 16
- DOS 9,,,,<OFFSET FMSG>
- DOS 76,0
-
- FATAL ENDP
-
- ; Internal 8 x 8 font must be appended here
- ; use command COPY FONTEDIT.BIN/B+< 8X8 font name >/B FONTEDIT.COM/B
-
- MYFONT LABEL BYTE
-
- FE ENDS
-
- END START